home *** CD-ROM | disk | FTP | other *** search
/ PC Media 22 / PC MEDIA CD22.iso / share / prog / datalib2 / packdb.cpp < prev    next >
C/C++ Source or Header  |  1995-08-17  |  2KB  |  77 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #include "database.hpp"
  6.  
  7. main(int argc, char *argv[])
  8. {
  9.  char index[128];       // Holds index name if supplied
  10.  long i;
  11.  
  12.  if (argc<3)
  13.  {
  14.   printf("\nUsage : packdb infile outfile [index]\n");
  15.   printf("\n\nDuplicates infile database to outfile database");
  16.   printf("\nremoving deleted records.\n\n");
  17.   printf("\nindex if supplied will operate on infile to define\n");
  18.   printf("\nthe order records are written to outfile\n\n");
  19.   exit(1);
  20.  }
  21.  if (argc==4) strcpy(index,argv[3]); else *index=0;
  22.  
  23.  database *dbin=new database(argv[1],index);    // Open input database
  24.  database *dbout=new database();                // Create new output database
  25.  
  26.  if (dbin->isvalid())           // Check input database is valid
  27.  {
  28.   delete dbin; delete dbout;
  29.   printf("\nUnable to open input database, error %d\n\n",dbin->isvalid());
  30.   exit(1);
  31.  }
  32.  
  33.  for(i=1; i<=dbin->getnfield(); i++)    // Copy all fields
  34.   dbout->addfield(dbin->getfield(i));
  35.  
  36.  if (dbout->write(argv[2]))
  37.  {
  38.   delete dbin; delete dbout;
  39.   printf("\nUnable to open output database\n\n");
  40.   exit(2);
  41.  }
  42.  
  43.  record *reci=new record(*dbin);
  44.  record *reco=new record(*dbout);
  45.  
  46.  long recn=1;
  47.  printf("\n");
  48.  
  49.  int rv=reci->select(FIRST);    // set to 1st record (default undeleted)
  50.  while(!rv)
  51.  {
  52.   for(i=1; i<=dbin->getnfield(); i++)           // Copy all fields
  53.   {
  54.    if (dbin->getfield(i)->gettype()=='N')       // Numeric fields
  55.    {
  56.     reco->setfield(i,atof(reci->getfield(i)));
  57.    }
  58.    else reco->setfield(i,reci->getfield(i));    // All other fields
  59.   }
  60.   reco->write(NEW);                             // Write new record
  61.   rv=reci->select(NEXT);                        // Next input record
  62.   printf("\r%ld",recn++);
  63.  }
  64.  
  65.  delete reci;
  66.  delete reco;
  67.  delete dbin;
  68.  delete dbout;
  69.  printf("\n\nOperation complete\n");
  70. }
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.